home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Atari Mega Archive 1
/
Atari Mega Archive - Volume 1.iso
/
ste
/
stedemo.lzh
/
10KHZSTE.S
< prev
next >
Wrap
Text File
|
1990-07-06
|
15KB
|
901 lines
*************************************************
* Mod-palyeri sovitettuna STE:n äänipiirille
* JV 30/4/90
*
* Parannettu tulostusta ja kommentoitu
************************************************
include 'a:\sorsat\startup.s'
main
jsr alusta alustetaan ste:n äänipiiri
JSR SAVE_INTERRUPTS
JSR INPUT_MODULE_NAME
JSR INIT_MUSIC
JSR INIT_INTERRUPTS
JSR PLAY_MUSIC
TOO_BAD
JSR REINSTALL_INTERRUPTS
rts
************************************************
* STE äänipiirin alustus
alusta
move.b #0,$ff8901 resetoidaan äänipiiri
move.b #$03,$ff8921 stereomode,50 kHz
lea adata,a0 puskurin alkuosoite
move.l a0,d0
move.b d0,$ff8907
lsr.l #8,d0
move.b d0,$ff8905
lsr.l #8,d0
move.b d0,$ff8903
lea adata+2,a0 puskurin loppuosoite
move.l a0,d0
move.b d0,$ff8913
lsr.l #8,d0
move.b d0,$ff8911
lsr.l #8,d0
move.b d0,$ff890f
move.b #3,$ff8901 aloitetaan toisto
move.w #$7ff,$ff8924 suodattimen data
move.w #%0000001001001100,$ff8924
rts
even
adata ds.b 1 äänipuskuri on 2 datan mittainen
bdata ds.b 1
***********************************************
SAVE_INTERRUPTS
MOVE.L $70.W,SAVE_VBL
MOVE.B $FFFFFA07.W,MFP
MOVE.B $FFFFFA09.W,MFP+1
MOVEM.L $FFFF8240.W,D0-D7
MOVEM.L D0-D7,SHIFTER
MOVE.B $FFFF8260.W,SHIFTER+32
MOVE.L $134.W,TIMERA
MOVE.B $FFFFFA0B.W,TIMERA+4
MOVE.B $FFFFFA0F.W,TIMERA+5
MOVE.B $FFFFFA13.W,TIMERA+6
MOVE.B $FFFFFA19.W,TIMERA+7
MOVE.B $FFFFFA1F.W,TIMERA+8
RTS
*********************************************************
INPUT_MODULE_NAME
MOVE.L #INDICATION,-(SP) kysytään nimi
MOVE #9,-(SP)
TRAP #1
LEA 6(SP),SP teksti puskuriin
PEA FILENAME
MOVE.W #$A,-(SP)
TRAP #1
LEA 6(SP),SP
RTS
*******************************************************
INIT_MUSIC
CLR -(SP)
MOVE.L #FILENAME+2,-(SP)
MOVE #$3D,-(SP)
TRAP #1
LEA 8(SP),SP
MOVE.L D0,D1
TST.W D0
BMI ERROR
MOVE.L #BUFFER,-(SP)
MOVE.L #$FFFFF,-(SP)
MOVE D1,-(SP)
MOVE #$3F,-(SP)
TRAP #1
LEA 12(SP),SP
TST.L D0
BMI ERROR
MOVE D1,-(SP)
MOVE #$3E,-(SP)
TRAP #1
LEA 4(SP),SP
TST.W D0
BMI ERROR
LEA BUFFER,A0
LEA 20+30*15(A0),A0
MOVEQ #0,D0
MOVE.B (A0)+,D0
MOVEQ #0,D1
MOVE.B (A0)+,D1
LEA BUFFER,A0
LEA 30*16(A0),A0
ADD D1,A0
MOVE.L A0,PAT
LEA BUFFER,A0
LEA 20+30*15+2(A0),A0
MOVEQ #0,D1
MOVEQ #0,D2
HOW_MANY_PAT
MOVE.B (A0)+,D1
CMP.B D1,D2
BPL CONT_HOW_MANY_PAT
MOVE.B D1,D2
CONT_HOW_MANY_PAT
DBRA D0,HOW_MANY_PAT
ADD.B #1,D2
MULU #1024,D2
MOVE.L PAT,D0
ADD.L D2,D0
MOVE.L D0,A2
LEA BUFFER,A0
LEA 20(A0),A0
LEA INS,A1
LEA 16(A1),A1
MOVEQ #15-1,D0
READ_INS
MOVEQ #0,D1
MOVE 22(A0),D1
LSL.L #1,D1
MOVE.L D1,(A1)
MOVE.L D1,4(A1)
MOVEQ #0,D1
MOVE 24(A0),D1
BEQ CONT_READ_VOLUME
SUBQ #1,D1
CONT_READ_VOLUME
MOVE D1,12(A1)
MOVEQ #0,D1
MOVE 28(A0),D1
LSL.L #1,D1
CMP.B #2,D1
BNE CONT_READ_INS
MOVEQ #0,D1
CONT_READ_INS
SWAP D1
MOVE.L D1,8(A1)
MOVE.L (A1),D1
MOVE.L A2,4(A1)
ADD.L D1,A2
LEA 30(A0),A0
LEA 16(A1),A1
DBRA D0,READ_INS
LEA INS,A0
LEA 16(A0),A0
LEA BUFFER,A1
LEA 20(A1),A1
LEA $68000,A2
MOVEQ #15-1,D0
REVERSE
MOVEQ #0,D1
MOVE 22(A1),D1
BEQ END_REVERSE_THIS_INS
LSL.L #1,D1
SUBQ.L #1,D1
MOVE.L D1,D2
MOVE.L 4(A0),A3
REV_1
MOVE.B (A3)+,(A2)
ADD.B #$80,(A2)+
DBRA D1,REV_1
MOVE.L 4(A0),A3
REV_2
MOVE.B -(A2),(A3)+
DBRA D2,REV_2
END_REVERSE_THIS_INS
LEA 16(A0),A0
LEA 30(A1),A1
DBRA D0,REVERSE
RTS
***********************************************************
INIT_INTERRUPTS
MFP_RESET
MOVE.B #0,$FFFFFA07.W
MOVE.B #0,$FFFFFA09.W
YAMAHA_RESET
MOVE.B #0,$FFFF8800.W
MOVE.B #0,$FFFF8802.W
MOVE.B #1,$FFFF8800.W
MOVE.B #0,$FFFF8802.W
MOVE.B #2,$FFFF8800.W
MOVE.B #0,$FFFF8802.W
MOVE.B #3,$FFFF8800.W
MOVE.B #0,$FFFF8802.W
MOVE.B #4,$FFFF8800.W
MOVE.B #0,$FFFF8802.W
MOVE.B #5,$FFFF8800.W
MOVE.B #0,$FFFF8802.W
MOVE.B #7,$FFFF8800.W
MOVE.B #$FF,$FFFF8802.W
MOVE.B #8,$FFFF8800.W
MOVE.B #0,$FFFF8802.W
MOVE.B #9,$FFFF8800.W
MOVE.B #0,$FFFF8802.W
MOVE.B #10,$FFFF8800.W
MOVE.B #0,$FFFF8802.W
RTS
***************************************************************
REINSTALL_INTERRUPTS
MOVEM.L NO_COLOR,D0-D7
MOVEM.L D0-D7,$FFFF8240.W
MOVE.L SAVE_VBL,$70.W
MOVE.L TIMERA,$134.W
MOVE.B TIMERA+4,$FFFFFA0B.W
MOVE.B TIMERA+5,$FFFFFA0F.W
MOVE.B TIMERA+6,$FFFFFA13.W
MOVE.B TIMERA+7,$FFFFFA19.W
MOVE.B TIMERA+8,$FFFFFA1F.W
MOVE.B MFP,$FFFFFA07.W
MOVE.B MFP+1,$FFFFFA09.W
MOVE.L #CLS,-(SP)
MOVE #9,-(SP)
TRAP #1
LEA 6(SP),SP
MOVEM.L SHIFTER,D0-D7
MOVEM.L D0-D7,$FFFF8240.W
RTS
ERROR
MOVE.L #TOO_BAD,(SP)
RTS
***********************************************************
PLAY_MUSIC
;GET MUSIC GOING
ON MOVE.W #$2700,SR ei saa keskeyttää
LEA PLAYER_DATA,A4 datapointteri
MOVE.W #6,SPD+2
MOVE.B #6,SPEED(A4)
MOVE.B #1,POS(A4)
MOVE.B SEQ-2,TRK(A4)
MOVE.L #SEQ-1,MUS+2
LEA OFF,A0
LEA OFF,A1
LEA OFF,A2
LEA OFF,A3
CLR.L D0
CLR.L D1
CLR.L D2
CLR.L D3
MOVE.L #$7F8,D7
LEA $FFFF8800.W,A4 pointteri äänipiiriin
CLR.L F0+2 smf koodia !!!!!
CLR.L F1+2 paskaaa !!!!!!!!
CLR.L F2+2 ilmeisesti portamentoa
CLR.L F3+2 varten ???
CLR.L V0+2
CLR.L V1+2
CLR.L V2+2
CLR.L V3+2
MOVE.L #AMIGA,$134.W Timer-A vektori
MOVE.B #0,$FFFFFA0B.W
MOVE.B #0,$FFFFFA0F.W
MOVE.B #0,$FFFFFA19.W
MOVE.B #0,$FFFFFA1F.W
MOVE.B #32,$FFFFFA13.W
MOVE.B #0,$FFFFFA19.W
BCLR #3,$FFFFFA17.W
MOVE.B #61,$FFFFFA1F.W
MOVE.B #1,$FFFFFA19.W
MOVE.B #32,$FFFFFA07.W
MOVE.L #VBL,$70.W Oma VBL rutiini
STOP #$2300
MAIN2
* Put your program which use D6,A5,A6 here
CMP.B #$39,$FFFFFC02.W
BEQ END_PLAYING_MUSIC
BRA MAIN2
********************************************************************
* Soittorutiini
AMIGA
SWAP D0
SWAP D1
SWAP D2
SWAP D3
V0 SUB.L #0,D0 portamentot
BMI.S L0
V1 SUB.L #0,D1
BMI.S L1
V2 SUB.L #0,D2
BMI.S L2
V3 SUB.L #0,D3
BMI.S L3
OUT SWAP D0
SWAP D1
SWAP D2
SWAP D3
MOVEQ #0,D4 naihin tulos
MOVEQ #0,D5
MOVE.B 0(A0,D0),D4
MOVE.B 0(A1,D1),D5
ADD.W D5,D4
lsr.w #1,d4
add.b #$80,d4
move.b d4,adata
clr.w d5
clr.w d4
MOVE.B 0(A2,D2),D5
MOVE.B 0(A3,D3),D4
ADD.W D5,D4
lsr.w #1,d4
add.b #$80,d4
move.b d4,bdata
rte
*****************************************************************
L0 MOVE.L #0,D0 jos meni negatiiviseksi
F0 MOVE.L #0,V0+2 niin nollataan arvo,
BRA V1 ei enää vahennetä.
L1 MOVE.L #0,D1
F1 MOVE.L #0,V1+2
BRA V2
L2 MOVE.L #0,D2
F2 MOVE.L #0,V2+2
BRA V3
L3 MOVE.L #0,D3
F3 MOVE.L #0,V3+2
BRA OUT
*********************************************************
RESTART
LEA PLAYER_DATA,A4
MOVE.W #6,SPD+2
MOVE.B #6,SPEED(A4)
MOVE.B #1,POS(A4)
MOVE.B SEQ-2,TRK(A4)
MOVE.L #SEQ-1,MUS+2
LEA OFF,A0
LEA OFF,A1
LEA OFF,A2
LEA OFF,A3
CLR.L D0
CLR.L D1
CLR.L D2
CLR.L D3
CLR.L F0+2
CLR.L F1+2
CLR.L F2+2
CLR.L F3+2
CLR.L V0+2
CLR.L V1+2
CLR.L V2+2
CLR.L V3+2
BRA PLAY
***************************************************************
* Pystysynkkarutiini
VBL
MOVE #$2700,SR ei saa keskeyttää
MOVEM.L D6/A5-A6,-(SP)
JSR PORTAMENTO muodostetaan portamentot
SUBQ.B #1,PLAYER_DATA joko data loppu ?
BNE END ei vielä.
JSR PLAY alustetaan uudestaan
END
MOVEM.L (SP)+,D6/A5-A6
RTE
PLAYER_DATA DS.W 8
SPEED EQU 0
POS EQU SPEED+1
TRK EQU POS+1
FRQ INCBIN 'a:\sorsat\10KHZ.FRQ'
****************************************************************
PLAY
MOVE.L SAVE_A6_OF_PLAYER,A6
CMP.B #$39,$FFFFFC02.W
BEQ END_PLAYING_MUSIC
LEA PLAYER_DATA(PC),A4
LEA INS(PC),A5
SPD MOVE.B #6,SPEED(A4)
SUBQ.B #1,POS(A4)
BNE P0
MOVE.B #$40,POS(A4)
ADDQ.L #1,MUS+2-PLAYER_DATA(A4)
SUBQ.B #1,TRK(A4)
BMI RESTART
;BACK TO PLAYER
MOVEQ #0,D4
MUS MOVE.B $0,D4
SWAP D4
LSR.L #6,D4
MOVE.L PAT,A6
LEA (A6,D4.L),A6
P0 CLR VOICE0
MOVE.W